package com.ccp.dev.form.dao;

import com.ccp.dev.core.basic.base.IBaseMapper;
import com.ccp.dev.core.basic.web.query.QueryFilter;
import com.ccp.dev.form.model.FormField;
import com.ccp.dev.form.model.FormTable;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * BPM_FORM_FIELD Dao对象
 *
 * @author zhaowj
 */
public interface FormFieldDao extends IBaseMapper<FormField, String> {

    /**
     * 根据主表id删除对应的字段列
     *
     * @param tableId 主表id
     * @return
     */
    int delByTableId(String tableId);

    /**
     * 通过tableId获取字段列表
     * @param tableId
     * @return
     */
    List<FormField> getByTableId(String tableId);

    /**
     * 通过tableId获取所有字段（包括已删除的）
     * @param tableId
     * @return
     */
    List<FormField> queryAllByTableId(String tableId);

    /**
     * 通过tableId获取字段列表(包含隐藏的)
     * @param tableId tableId
     * @return List<FormField> 集合
     */
    List<FormField> getByTableIdContainHidden(String tableId);

    /**
     *  查询列表，不包含删除和隐藏字段的字段
     * @param tableId 表id
     * @return List<FormField> 集合
     */
    List<FormField> getByTableIdNoHidden(String tableId);

    /**
     * 通过tableId获取字段集合
     * @param tableId tableId
     * @return List<FormField> 集合
     */
    List<FormField> getFieldsByTableId(String tableId);

    /**
     * 通过tableId和fieldName获取字段数据
     * @param tableId tableId
     * @param fieldName fieldName 字段名称
     * @return FormField
     */
    FormField getFieldByTidFna(@Param("tableId") String tableId,@Param("fieldName") String fieldName);

    /**
     * 通过tableId获取字段集合
     * @param tableId tableId isHidden=0
     * @return List<FormField> 集合
     */
    List<FormField> getAllByTableId(String tableId);

    /**
     * 查询表中加密字段信息
     * @param tableId
     * @param isEncrypt
     * @return
     */
    List<FormField> getEncryptFieldByTableId(@Param("tableId")String tableId,@Param("isEncrypt")int isEncrypt);

    /**
     * 更新字段序号
     * @param condition
     * @return
     */
    int updateFieldSn(Map<String, Object> condition);
    /**
     * 根据流程定义ID获取流程表单变量。
     * @param procDefId,parentProcDefId
     * @return
     */
    List<FormField> queryFormVarByFlowProcDefIdOrParentProcDefId(@Param("procDefId") String procDefId,@Param("parentProcDefId") String parentProcDefId);


    FormTable getByAliasTableName(String dsAlias, String tableName);

    List<FormField> queryBySerialNum(String alias);
}
